iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Software Development

可以Go一輩子嗎?系列 第 23

Day23. Gin套件介紹與基礎使用

  • 分享至 

  • xImage
  •  

Day23. Gin套件介紹與基礎使用

這4天要來介紹Gin框架,一個輕量級的Web框架,它基於Go語言的net/http套件進行開發,提供了許多方便的功能,例如路由、中間件、參數綁定、請求處理等等。Gin的性能非常好,並且易於使用,所以在Go語言中非常受歡迎。
它的特色如下

  • 速度快,且輕量化
  • 容易使用
  • 可以透過Middleware來擴展功能
  • 解析JSON、XML、Form等請求參數
  • 透過Group來管理路由
  • 可以攔截Panic,並返回錯誤訊息,因此我們甚至能直接寫一個檢查err並panic的middleware
  • 可以透過gin.Context來取得請求的資訊,並進行回應

安裝Gin

要使用Gin,我們需要先安裝它,可以使用go get指令來安裝Gin

go get -u github.com/gin-gonic/gin

注意:需要Go 1.16以上的版本才能使用gin

然後import 到你的code裡面

package main
import (
    "github.com/gin-gonic/gin"
    "net/http" // 用於提供狀態碼常數
)

func main(){
    r := gin.Default()
    r.GET("/", func(c *gin.Context){
        c.String(http.StatusOK, "Hello, World!")
    })
    r.Run(":8080")
}

接著執行程式,然後打開瀏覽器輸入http://localhost:8080然後BanG!恭喜你成功撰寫第一個Gin API
Image

Gin的路由

如果要指定request method,可以使用c.(method)來進行相對應的requst method處理,然後在第二個參數放入處理函式(又稱為handler),你可以放入多個handler,Gin會依序執行

r.GET("/get", func(c *gin.Context){
    c.String(http.StatusOK, "GET")
})
r.POST("/post", func(c *gin.Context){
    c.String(http.StatusOK, "POST")
})
r.PUT("/put", func(c *gin.Context){
    c.String(http.StatusOK, "PUT")
})
r.DELETE("/delete", func(c *gin.Context){
    c.String(http.StatusOK, "DELETE")
})
//...

Gin的參數綁定

Query String

透過c.Query來取得Query String的參數

r.GET("/query", func(c *gin.Context){
    name := c.Query("name")
    age := c.Query("age")
    c.JSON(http.StatusOK, gin.H{
        "name": name,
        "age": age,
    })
})

Path Parameter

透過:param來取得Path Parameter

r.GET("/path/:name/:age", func(c *gin.Context){
    name := c.Param("name")
    age := c.Param("age")
    c.JSON(http.StatusOK, gin.H{
        "name": name,
        "age": age,
    })
})

Form Data

透過c.PostForm來取得Form Data

r.POST("/form", func(c *gin.Context){
    name := c.PostForm("name")
    age := c.PostForm("age")
    c.JSON(http.StatusOK, gin.H{
        "name": name,
        "age": age,
    })
})

JSON

透過c.BindJSON來取得JSON資料

type Person struct {
    Name string `json:"name"`
    Age int `json:"age"`
}
r.POST("/json", func(c *gin.Context){
    var person Person
    if err := c.BindJSON(&person); err != nil {
        c.String(http.StatusBadRequest, "Bad Request")
        return
    }
    c.JSON(http.StatusOK, person)
})

那麼今天的文章就到這告一段落,如果我的文章有任何地方有錯誤請在留言區反應
明天將會介紹Gin上傳檔案的方法
time

REF


上一篇
Day22. 內建套件介紹(二):sort, io、os、net/http
下一篇
Day24. Gin上傳檔案
系列文
可以Go一輩子嗎?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言